"""
LLM路由模块

提供基于Qwen Turbo大语言模型的问答处理接口
"""

from flask import Blueprint, request, jsonify
from qwen_client import call_qwen

# 创建LLM蓝图
llm_bp = Blueprint('llm', __name__)


@llm_bp.route('/llm/process', methods=['POST'])
def llm_process():
    """
    LLM问答处理接口
    
    接收用户输入的问题，调用Qwen Turbo模型进行处理，返回模型的完整输出结果。
    此接口复用qwen_client.py中的核心调用逻辑，确保响应速度和质量。
    
    请求方法: POST
    请求格式: application/json
    
    请求参数:
        prompt (str): 用户输入的问题或文本，必填，不能为空
    
    返回格式:
        成功响应 (200):
        {
            "status": "success",
            "data": {
                "response": "大模型的完整输出结果",
                "model": "qwen-turbo",
                "input_length": 输入文本长度,
                "output_length": 输出文本长度
            }
        }
        
        失败响应 (400/500):
        {
            "status": "error",
            "message": "错误描述信息"
        }
    
    异常处理:
        - 参数验证失败: 返回400状态码
        - API调用失败: 返回500状态码
        - 未知异常: 返回500状态码
    """
    try:
        # 1. 获取请求数据
        data = request.json
        if not data:
            return jsonify({
                "status": "error",
                "message": "请求数据不能为空"
            }), 400
        
        # 2. 提取并验证prompt参数
        prompt = data.get('prompt', '').strip()
        
        if not prompt:
            return jsonify({
                "status": "error",
                "message": "参数prompt不能为空"
            }), 400
        
        # 3. 调用Qwen Turbo模型进行处理
        # 复用qwen_client.py中的call_qwen函数
        print(f"🚀 开始处理LLM请求，提示词长度: {len(prompt)}")
        response_text = call_qwen(prompt)
        print(f"✅ LLM处理成功，响应长度: {len(response_text)}")
        
        # 4. 格式化并返回成功响应
        return jsonify({
            "status": "success",
            "data": {
                "response": response_text,  # 大模型的完整输出结果
                "model": "qwen-turbo",
                "input_length": len(prompt),
                "output_length": len(response_text)
            }
        }), 200
        
    except Exception as e:
        # 5. 捕获并处理所有异常
        print(f"❌ LLM处理异常: {str(e)}")  # 服务端日志
        return jsonify({
            "status": "error",
            "message": f"LLM处理失败: {str(e)}"
        }), 500

